import sys
sys.path.append("../../")

from model.StockBaseInfo import *
from model.CommonDb import *
from controller.MsgController import *
from frameworks.utils.RedisUtil import *
from services.DayKlineService import *
from controller.ApiController import *

import datetime

class ZhangtingStockController:
    def __init__(self,args):
        self.args = args
        self.service = StockBaseInfo()
        self.today = datetime.datetime.now().strftime("%Y-%m-%d")
        self.msg = MsgController()
        self.msgcon = MsgController()
        self.klineService = DayKlineService()
        self.baseService = BaseService()
    def run(self):
        if self.args["func"] == "set_now_cache":
            return self.setNowCache()
        elif self.args["func"] == "get_now_cache":
            return self.getNowCache()
        elif self.args["func"] == "set_minite_cache":
            return self.setMiniteCache()

    """
    获取每日行业的净收入
    f43：最新价 f44：最高 f45：最低 f46:今开 f47：总手数 f48：成交金额 f49：外盘
    f50：量比 f51：涨停 f52：跌停 f55：收益  f58：股票名称 f60：昨收 f71:均价
    f84:总股本 f85：流通股本 f92:每股净资产 f105:归属净利润 f116:总市值 f117：流通市值 
    f127：概念板块 f128：地域板块 f135:主力流入 f136:主力流出 f137:主力净流入 f138:超大单流入 f139:超大单流出
    f140：净超大单 f141:大单净流入 f142:大单净流出 f143净大单 f144 中单净流入 f145: 中单净流出
    f146:净中单 f147:小单净流入 f148：小单净流出 f149:净小单 f161：内盘 f162:动态市盈率 f163:静态市盈率
    f164:ttm市盈率 f167：市净率 f168：换手率 f169:涨跌额 f170：涨幅 f173:净资产收益率 
    f183:营业总收入 f184:营业总收入同比增长 f185：归属净利润同比增长 f186:毛利率
    f187:净利率 f188:负债率 f189：上市日期 f190: 每股未分配利润  f191:委比
    f192:尾差 f31:卖5价格 f32:卖5手数 f33:卖4价格 f34:卖4手数 f35:卖3价格 f36:卖3手数
    f37:卖2价格 f38:卖2手数 f39:卖1价格 f40:卖1手数 f19:买1价格 f20:买1手数
    f17:买2价格 f18:买2手数 f15:买3价格 f16:买3手数 f13:买4价格 f14:买4手数
    f11:买5价格 f12:买5手数
    """
    def setNowCache(self):
        redis = RedisUtil()
        ck = "zhangting_score_stock_cache"
        apiController = ApiController()
        numlist = [1, 2, 3, 9]
        data = []
        for num in numlist:
            newParam = {}
            newParam["num"] = num
            obj = apiController.getZhangTingPage(newParam)
            for line in obj:
                priceinfo = self.service.getDfcfInfo(line["code"][2:])
                data.append(priceinfo)
        redis.vset(ck, json.dumps(data))

    def getNowCache(self):
        redis = RedisUtil()
        ck = "select_stock_cache"
        data = json.loads(redis.vget(ck))
        for row in data:
            print(row)

    def getMiniteData(self,code):
        dfcfCode = self.baseService.translateDfcfCode(code)
        response = requests.get(
            "https://push2.eastmoney.com/api/qt/stock/trends2/get?secid=" + dfcfCode + "&fields1=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13&fields2=f51,f52,f53,f54,f55,f56,f57,f58&ut=e1e6871893c6386c5ff6967026016627&iscr=0&isqhquote=")
        data = response.json()
        miniteData = []
        for row in data["data"]["trends"]:
            line = row.split(",")
            info = {
                "curtime":line[0],
                "close":float(line[2]),
                "volume":int(line[5]),
                "money":float(line[6]),
                "avage":float(line[7])
            }
            miniteData.append(info)
        return miniteData

    def setMiniteCache(self):
        redis = RedisUtil()
        ck = "zhangting_score_minite_stock_cache_"
        apiController = ApiController()
        numlist = [1, 2, 3, 9]
        for num in numlist:
            newParam = {}
            newParam["num"] = num
            obj = apiController.getZhangTingPage(newParam)
            for line in obj:
                miniteInfo = self.getMiniteData(line["code"][2:])
                redis.vset(ck+line["code"][2:], json.dumps(miniteInfo))

